<!-- HTML header for doxygen 1.8.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" /> <!-- Prevent indexing by search engines -->
<title>Compute Library: src/core/CL/cl_kernels/fast_corners.cl File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Compute Library
   &#160;<span id="projectnumber">18.03</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.xhtml"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.xhtml"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.xhtml"><span>Namespaces</span></a></li>
      <li><a href="annotated.xhtml"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.xhtml"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.xhtml"><span>File&#160;List</span></a></li>
      <li><a href="globals.xhtml"><span>Globals</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('fast__corners_8cl.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">fast_corners.cl File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="helpers_8h_source.xhtml">helpers.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="types_8h_source.xhtml">types.h</a>&quot;</code><br />
</div>
<p><a href="fast__corners_8cl_source.xhtml">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a9da9e257c05fa101dacfaaedd305f5bb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(ptr,  a,  stride,  dark,  bright,  dark_mask,  bright_mask)</td></tr>
<tr class="memdesc:a9da9e257c05fa101dacfaaedd305f5bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load a pixel and set the mask values.  <a href="#a9da9e257c05fa101dacfaaedd305f5bb">More...</a><br /></td></tr>
<tr class="separator:a9da9e257c05fa101dacfaaedd305f5bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask,  dark_mask,  isCorner)</td></tr>
<tr class="memdesc:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a pixel is a corner.  <a href="#a2e2df45f46c673a1a5a1c8f4eb06aa09">More...</a><br /></td></tr>
<tr class="separator:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:aea4e2a64dfdec6a9ecf62f8cd518fc17"><td class="memItemLeft" align="right" valign="top">uchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a> (uchar candidate_pixel, __global unsigned char *ptr, unsigned int stride, unsigned char threshold)</td></tr>
<tr class="separator:aea4e2a64dfdec6a9ecf62f8cd518fc17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33152baf05787bd17259b692bfba24af"><td class="memItemLeft" align="right" valign="top">__kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a33152baf05787bd17259b692bfba24af">fast_corners</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_offset_first_element_in_bytes, float threshold_value)</td></tr>
<tr class="memdesc:a33152baf05787bd17259b692bfba24af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast corners implementation.  <a href="#a33152baf05787bd17259b692bfba24af">More...</a><br /></td></tr>
<tr class="separator:a33152baf05787bd17259b692bfba24af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1e2ee5ba250337a4e1889423e11aa81"><td class="memItemLeft" align="right" valign="top">__kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#ad1e2ee5ba250337a4e1889423e11aa81">copy_to_keypoint</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_offset_first_element_in_bytes, uint max_num_points, uint <a class="el" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>, __global uint *num_of_points, __global <a class="el" href="struct_keypoint.xhtml">Keypoint</a> *out)</td></tr>
<tr class="memdesc:ad1e2ee5ba250337a4e1889423e11aa81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy result to <a class="el" href="struct_keypoint.xhtml">Keypoint</a> buffer and count number of corners.  <a href="#ad1e2ee5ba250337a4e1889423e11aa81">More...</a><br /></td></tr>
<tr class="separator:ad1e2ee5ba250337a4e1889423e11aa81"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a8d09117e1c8a726efc8d9ec9d9d8ed8a"><td class="memItemLeft" align="right" valign="top">constant int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a> [16][2]</td></tr>
<tr class="separator:a8d09117e1c8a726efc8d9ec9d9d8ed8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a2e2df45f46c673a1a5a1c8f4eb06aa09"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CHECK_CORNER</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bright_mask, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">dark_mask, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">isCorner&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">{                                                     \</div><div class="line">        for(<span class="keywordtype">int</span> i = 0; i &lt; 16; i++)                       \</div><div class="line">        {                                                 \</div><div class="line">            isCorner |= ((bright_mask &amp; 0x1FF) == 0x1FF); \</div><div class="line">            isCorner |= ((dark_mask &amp; 0x1FF) == 0x1FF);   \</div><div class="line">            if(isCorner)                                  \</div><div class="line">            {                                             \</div><div class="line">                break;                                    \</div><div class="line">            }                                             \</div><div class="line">            bright_mask &gt;&gt;= 1;                            \</div><div class="line">            dark_mask &gt;&gt;= 1;                              \</div><div class="line">        }                                                 \</div><div class="line">    }</div></div><!-- fragment -->
<p>Checks if a pixel is a corner. </p>
<p>Pixel is considerred as a corner if the 9 continuous pixels in the Bresenham circle are bright or dark.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">bright_mask</td><td>The mask recording postions of bright pixels </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dark_mask</td><td>The mask recording postions of dark pixels </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">isCorner</td><td>Indicate whether candidate pixel is corner </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00082">82</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

<p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, and <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>

</div>
</div>
<a class="anchor" id="a9da9e257c05fa101dacfaaedd305f5bb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define LOAD_AND_SET_MASK</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">a, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">stride, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">dark, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bright, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">dark_mask, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">bright_mask&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">{                                                                           \</div><div class="line">        unsigned <span class="keywordtype">char</span> pixel;                                                    \</div><div class="line">        pixel = *(ptr + (int)stride * <a class="code" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a>[<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">a</a>][1] + <a class="code" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a>[<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">a</a>][0]);       \</div><div class="line">        dark_mask |= (pixel &lt; dark) &lt;&lt; a;                                       \</div><div class="line">        bright_mask |= (pixel &gt; bright) &lt;&lt; a;                                   \</div><div class="line">    }</div><div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_aac40b7097f2bda9274ae07fa33d15a79"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">arm_compute::test::validation::a</a></div><div class="ttdeci">CLTensor a</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00121">GEMM.cpp:121</a></div></div>
<div class="ttc" id="fast__corners_8cl_xhtml_a8d09117e1c8a726efc8d9ec9d9d8ed8a"><div class="ttname"><a href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a></div><div class="ttdeci">constant int offsets_s[16][2]</div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00037">fast_corners.cl:37</a></div></div>
</div><!-- fragment -->
<p>Load a pixel and set the mask values. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>The pointer to the starting address of source image </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>Index to indicate the position in the Bresenham circle </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>Stride of source image in x dimension </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dark</td><td>The left end of the threshold range </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bright</td><td>The right end of the threshold range </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dark_mask</td><td>The bit-set mask records dark pixels. Its bit is set as 1 if the corresponding pixel is dark </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">bright_mask</td><td>The bit-set mask records bright pixels. Its bit is set as 1 if the corresponding pixel is bright </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00068">68</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

<p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, and <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="aea4e2a64dfdec6a9ecf62f8cd518fc17"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uchar compute_strength </td>
          <td>(</td>
          <td class="paramtype">uchar&#160;</td>
          <td class="paramname"><em>candidate_pixel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">__global unsigned char *&#160;</td>
          <td class="paramname"><em>ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char&#160;</td>
          <td class="paramname"><em>threshold</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00098">98</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

<p>References <a class="el" href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00121">arm_compute::test::validation::a</a>, <a class="el" href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00122">arm_compute::test::validation::b</a>, <a class="el" href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00123">arm_compute::test::validation::c</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00082">CHECK_CORNER</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00068">LOAD_AND_SET_MASK</a>, and <a class="el" href="reference_2_threshold_8cpp_source.xhtml#l00035">arm_compute::test::validation::reference::threshold()</a>.</p>

<p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>
<div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;{</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordtype">short</span> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">a</a> = <a class="code" href="namespacearm__compute_1_1test_1_1validation_1_1reference.xhtml#a6cae310822a46019ba25a00ddb0f7e62">threshold</a>;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordtype">short</span> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a7b8004eef325a40dd43eb80755610fff">b</a> = 255;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">while</span>(b - a &gt; 1)</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    {</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        uchar        <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a497347573faa3778743ddf277f861094">c</a>           = convert_uchar_sat((a + b) / 2);</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bright_mask = 0;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dark_mask   = 0;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_bright = add_sat(candidate_pixel, c);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_dark   = sub_sat(candidate_pixel, c);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordtype">bool</span> isCorner = 0;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">for</span>(uint i = 0; i &lt; 16; i++)</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;            <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(ptr, i, stride, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        bright_mask |= (bright_mask &lt;&lt; 16);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        dark_mask |= (dark_mask &lt;&lt; 16);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask, dark_mask, isCorner);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">if</span>(isCorner)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        {</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;            a = convert_short(c);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        }</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        {</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            b = convert_short(c);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        }</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">a</a>;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;}</div><div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_aac40b7097f2bda9274ae07fa33d15a79"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#aac40b7097f2bda9274ae07fa33d15a79">arm_compute::test::validation::a</a></div><div class="ttdeci">CLTensor a</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00121">GEMM.cpp:121</a></div></div>
<div class="ttc" id="fast__corners_8cl_xhtml_a9da9e257c05fa101dacfaaedd305f5bb"><div class="ttname"><a href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a></div><div class="ttdeci">#define LOAD_AND_SET_MASK(ptr, a, stride, dark, bright, dark_mask, bright_mask)</div><div class="ttdoc">Load a pixel and set the mask values. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00068">fast_corners.cl:68</a></div></div>
<div class="ttc" id="fast__corners_8cl_xhtml_a2e2df45f46c673a1a5a1c8f4eb06aa09"><div class="ttname"><a href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a></div><div class="ttdeci">#define CHECK_CORNER(bright_mask, dark_mask, isCorner)</div><div class="ttdoc">Checks if a pixel is a corner. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00082">fast_corners.cl:82</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a497347573faa3778743ddf277f861094"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a497347573faa3778743ddf277f861094">arm_compute::test::validation::c</a></div><div class="ttdeci">CLTensor c</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00123">GEMM.cpp:123</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_xhtml_a7b8004eef325a40dd43eb80755610fff"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation.xhtml#a7b8004eef325a40dd43eb80755610fff">arm_compute::test::validation::b</a></div><div class="ttdeci">CLTensor b</div><div class="ttdef"><b>Definition:</b> <a href="validation_2_c_l_2_g_e_m_m_8cpp_source.xhtml#l00122">GEMM.cpp:122</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_1_1reference_xhtml_a6cae310822a46019ba25a00ddb0f7e62"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation_1_1reference.xhtml#a6cae310822a46019ba25a00ddb0f7e62">arm_compute::test::validation::reference::threshold</a></div><div class="ttdeci">SimpleTensor&lt; T &gt; threshold(const SimpleTensor&lt; T &gt; &amp;src, T threshold, T false_value, T true_value, ThresholdType type, T upper)</div><div class="ttdef"><b>Definition:</b> <a href="reference_2_threshold_8cpp_source.xhtml#l00035">Threshold.cpp:35</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a class="anchor" id="ad1e2ee5ba250337a4e1889423e11aa81"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">__kernel void copy_to_keypoint </td>
          <td>(</td>
          <td class="paramtype">__global uchar *&#160;</td>
          <td class="paramname"><em>input_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_step_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_step_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>max_num_points</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">__global uint *&#160;</td>
          <td class="paramname"><em>num_of_points</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">__global <a class="el" href="struct_keypoint.xhtml">Keypoint</a> *&#160;</td>
          <td class="paramname"><em>out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy result to <a class="el" href="struct_keypoint.xhtml">Keypoint</a> buffer and count number of corners. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_ptr</td><td>Pointer to the image with calculated strenghs. Supported data types: U8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">max_num_points</td><td>The maximum number of keypoints the array can hold </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">offset</td><td>The number of skipped pixels in x dimension </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">num_of_points</td><td>Number of points found </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>The keypoints found </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00230">230</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

<p>References <a class="el" href="helpers_8h_source.xhtml#l00102">CONVERT_TO_IMAGE_STRUCT</a>, <a class="el" href="hwc_8hpp_source.xhtml#l00259">id</a>, <a class="el" href="helpers_8h_source.xhtml#l00301">offset()</a>, <a class="el" href="helpers_8h_source.xhtml#l00142">Image::ptr</a>, and <a class="el" href="hwc_8hpp_source.xhtml#l00278">value</a>.</p>
<div class="fragment"><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;{</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="preprocessor">#ifndef UPDATE_NUMBER</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keywordflow">if</span>(*num_of_points &gt;= max_num_points)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    {</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    }</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* UPDATE_NUMBER */</span><span class="preprocessor"></span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> in = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(input);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    uchar <a class="code" href="hwc_8hpp.xhtml#a0f61d63b009d0880a89c843bd50d8d76">value</a> = *in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordflow">if</span>(value &gt; 0)</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    {</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;        <span class="keywordtype">int</span> <span class="keywordtype">id</span> = atomic_inc(num_of_points);</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="keywordflow">if</span>(<span class="keywordtype">id</span> &lt; max_num_points)</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].strength        = <a class="code" href="hwc_8hpp.xhtml#a0f61d63b009d0880a89c843bd50d8d76">value</a>;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].x               = get_global_id(0) + <a class="code" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].y               = get_global_id(1) + <a class="code" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].tracking_status = 1;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].scale           = 0.f;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].orientation     = 0.f;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;            out[<a class="code" href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a>].error           = 0.f;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        }</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    }</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;}</div><div class="ttc" id="hwc_8hpp_xhtml_abaabdc509cdaba7df9f56c6c76f3ae19"><div class="ttname"><a href="hwc_8hpp.xhtml#abaabdc509cdaba7df9f56c6c76f3ae19">id</a></div><div class="ttdeci">uint32_t id</div><div class="ttdef"><b>Definition:</b> <a href="hwc_8hpp_source.xhtml#l00259">hwc.hpp:259</a></div></div>
<div class="ttc" id="helpers_8h_xhtml_a009469e4d9b8fce3b6d5e97d2077827d"><div class="ttname"><a href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a></div><div class="ttdeci">__global uchar * offset(const Image *img, int x, int y)</div><div class="ttdoc">Get the pointer position of a Image. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00301">helpers.h:301</a></div></div>
<div class="ttc" id="helpers_8h_xhtml_aebe814363556c244be043b13e7969197"><div class="ttname"><a href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_IMAGE_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00102">helpers.h:102</a></div></div>
<div class="ttc" id="struct_image_xhtml"><div class="ttname"><a href="struct_image.xhtml">Image</a></div><div class="ttdoc">Structure to hold Image information. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00140">helpers.h:140</a></div></div>
<div class="ttc" id="hwc_8hpp_xhtml_a0f61d63b009d0880a89c843bd50d8d76"><div class="ttname"><a href="hwc_8hpp.xhtml#a0f61d63b009d0880a89c843bd50d8d76">value</a></div><div class="ttdeci">void * value</div><div class="ttdef"><b>Definition:</b> <a href="hwc_8hpp_source.xhtml#l00278">hwc.hpp:278</a></div></div>
<div class="ttc" id="struct_image_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">Image::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00142">helpers.h:142</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a class="anchor" id="a33152baf05787bd17259b692bfba24af"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">__kernel void fast_corners </td>
          <td>(</td>
          <td class="paramtype">__global uchar *&#160;</td>
          <td class="paramname"><em>input_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_step_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_step_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">__global uchar *&#160;</td>
          <td class="paramname"><em>output_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>output_stride_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>output_step_x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>output_stride_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>output_step_y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>threshold_value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Fast corners implementation. </p>
<p>Calculates and returns the strength of each pixel.</p>
<p>The algorithm loops through the 16 pixels in the Bresenham circle and set low 16 bit of masks if corresponding pixel is bright or dark. It then copy the low 16 bit to the high 16 bit of the masks. Right shift the bit to check whether the 9 continuous bits from the LSB are set.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_ptr</td><td>Pointer to the first source image. Supported data types: U8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>Pointer to the first source image. Supported data types: U8 </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">threshold_value</td><td>Threshold value. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00155">155</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

<p>References <a class="el" href="fast__corners_8cl_source.xhtml#l00082">CHECK_CORNER</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, <a class="el" href="helpers_8h_source.xhtml#l00102">CONVERT_TO_IMAGE_STRUCT</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00068">LOAD_AND_SET_MASK</a>, <a class="el" href="helpers_8h_source.xhtml#l00142">Image::ptr</a>, and <a class="el" href="reference_2_threshold_8cpp_source.xhtml#l00035">arm_compute::test::validation::reference::threshold()</a>.</p>

<p>Referenced by <a class="el" href="_c_l_2_fast_corners_8cpp_source.xhtml#l00056">arm_compute::test::validation::DATA_TEST_CASE()</a>, and <a class="el" href="_fast_corners_fixture_8h_source.xhtml#l00052">FastCornersValidationFixture&lt; TensorType, AccessorType, ArrayType, FunctionType, T &gt;::setup()</a>.</p>
<div class="fragment"><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> in  = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(input);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> out = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(output);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="namespacearm__compute_1_1test_1_1validation_1_1reference.xhtml#a6cae310822a46019ba25a00ddb0f7e62">threshold</a> = (uchar)threshold_value;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bright_mask = 0;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dark_mask   = 0;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> isCorner = 0;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p        = *in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_bright = add_sat(p, threshold);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_dark   = sub_sat(p, threshold);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, 0, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 4, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 8, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 12, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    if(((bright_mask | dark_mask) &amp; 0x1111) == 0)</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    {</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 0;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    }</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, 1, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 2, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 3, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 5, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 6, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 7, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 9, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 10, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 11, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 13, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 14, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 15, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    bright_mask |= (bright_mask &lt;&lt; 16);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    dark_mask |= (dark_mask &lt;&lt; 16);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask, dark_mask, isCorner)</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    if(!isCorner)</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    {</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 0;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="preprocessor">#ifdef USE_MAXSUPPRESSION</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = <a class="code" href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a>(p, in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, input_stride_y, threshold);</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#else  </span><span class="comment">/* USE_MAXSUPPRESSION */</span><span class="preprocessor"></span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 1;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* USE_MAXSUPPRESSION */</span><span class="preprocessor"></span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;}</div><div class="ttc" id="fast__corners_8cl_xhtml_aea4e2a64dfdec6a9ecf62f8cd518fc17"><div class="ttname"><a href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a></div><div class="ttdeci">uchar compute_strength(uchar candidate_pixel, __global unsigned char *ptr, unsigned int stride, unsigned char threshold)</div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00098">fast_corners.cl:98</a></div></div>
<div class="ttc" id="fast__corners_8cl_xhtml_a9da9e257c05fa101dacfaaedd305f5bb"><div class="ttname"><a href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a></div><div class="ttdeci">#define LOAD_AND_SET_MASK(ptr, a, stride, dark, bright, dark_mask, bright_mask)</div><div class="ttdoc">Load a pixel and set the mask values. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00068">fast_corners.cl:68</a></div></div>
<div class="ttc" id="helpers_8h_xhtml_aebe814363556c244be043b13e7969197"><div class="ttname"><a href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_IMAGE_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00102">helpers.h:102</a></div></div>
<div class="ttc" id="fast__corners_8cl_xhtml_a2e2df45f46c673a1a5a1c8f4eb06aa09"><div class="ttname"><a href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a></div><div class="ttdeci">#define CHECK_CORNER(bright_mask, dark_mask, isCorner)</div><div class="ttdoc">Checks if a pixel is a corner. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00082">fast_corners.cl:82</a></div></div>
<div class="ttc" id="struct_image_xhtml"><div class="ttname"><a href="struct_image.xhtml">Image</a></div><div class="ttdoc">Structure to hold Image information. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00140">helpers.h:140</a></div></div>
<div class="ttc" id="struct_image_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">Image::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00142">helpers.h:142</a></div></div>
<div class="ttc" id="namespacearm__compute_1_1test_1_1validation_1_1reference_xhtml_a6cae310822a46019ba25a00ddb0f7e62"><div class="ttname"><a href="namespacearm__compute_1_1test_1_1validation_1_1reference.xhtml#a6cae310822a46019ba25a00ddb0f7e62">arm_compute::test::validation::reference::threshold</a></div><div class="ttdeci">SimpleTensor&lt; T &gt; threshold(const SimpleTensor&lt; T &gt; &amp;src, T threshold, T false_value, T true_value, ThresholdType type, T upper)</div><div class="ttdef"><b>Definition:</b> <a href="reference_2_threshold_8cpp_source.xhtml#l00035">Threshold.cpp:35</a></div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a class="anchor" id="a8d09117e1c8a726efc8d9ec9d9d8ed8a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">constant int offsets_s[16][2]</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div><div class="line">{</div><div class="line">    { 0, -3 },  </div><div class="line">    { 1, -3 },  </div><div class="line">    { 2, -2 },  </div><div class="line">    { 3, -1 },  </div><div class="line">    { 3, 0 },   </div><div class="line">    { 3, 1 },   </div><div class="line">    { 2, 2 },   </div><div class="line">    { 1, 3 },   </div><div class="line">    { 0, 3 },   </div><div class="line">    { -1, 3 },  </div><div class="line">    { -2, 2 },  </div><div class="line">    { -3, 1 },  </div><div class="line">    { -3, 0 },  </div><div class="line">    { -3, -1 }, </div><div class="line">    { -2, -2 }, </div><div class="line">    { -1, -3 }, </div><div class="line">}</div></div><!-- fragment -->
<p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00037">37</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.xhtml">core</a></li><li class="navelem"><a class="el" href="dir_8c278f79c760e5c5fbd911f9870614c1.xhtml">CL</a></li><li class="navelem"><a class="el" href="dir_25885286e9dad4fa105b7b25a8031bbf.xhtml">cl_kernels</a></li><li class="navelem"><a class="el" href="fast__corners_8cl.xhtml">fast_corners.cl</a></li>
    <li class="footer">Generated on Fri Mar 2 2018 12:37:55 for Compute Library by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>
